package com.scau.dao.impl;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;

import com.scau.dao.BaseDao;
import com.scau.dao.ISerCateDao;
import com.scau.util.DateTransform;
import com.scau.vo.ServiceCategory;

/**
 * @author Jinglun
 * @create 2017年3月14日
 */
public class SerCateDaoImpl extends BaseDao implements ISerCateDao {

	private Session session = null;
	private Transaction tx = null;
	private String hql = "";

	// 增
	@Override
	public boolean saveSerCate(ServiceCategory serviceCategory) {
		session = getSession();
		tx = session.beginTransaction();

		hql = "from ServiceCategory sc where sc.name = '"
				+ serviceCategory.getName() + "'";

		// 判断数据库中是否已存在同名的服务类型
		ServiceCategory exist = (ServiceCategory) session.createQuery(hql)
				.uniqueResult();

		if (exist != null) { // 已存在
			tx.commit();
			session.close(); 
			return false;
		} else { // db中没有记录，可插入
			session.save(serviceCategory);
			tx.commit(); // 事务关闭数据才真正插入数据库
			session.close(); // 关闭会话，释放资源
			return true;
		}

	}

	// 查所有服务类型
	@Override
	public List<ServiceCategory> listSerCate() {
		session = getSession();
		hql = "from ServiceCategory sc"; // 查出所有的服务类型
		Query query = session.createQuery(hql);
		//@SuppressWarnings("unchecked")
		List<ServiceCategory> scList = query.list();
		session.close();
		return scList;
	}

	// 改
	@Override
	public boolean updateSerCate(ServiceCategory serviceCategory) {
		session = getSession();
		tx = session.beginTransaction();
		// 获得要修改的实体
		ServiceCategory sc = (ServiceCategory) session.get(ServiceCategory.class, serviceCategory.getId());

		if (sc != null) {
			System.out.println(112233);
			// 更新名称跟注释,修改时间
			sc.setName(serviceCategory.getName());
			sc.setRemark(serviceCategory.getRemark());	
			sc.setGmtModified(serviceCategory.getGmtModified());
			tx.commit(); // 关闭事务数据才真正插入数据库
			session.close();
			return true;
		} else {
			tx.commit();
			session.close();
			return false;
		}
	}

	// 删
	@Override
	public boolean deleteSerCate(int id) {
		try {
			session = getSession();
			tx = session.beginTransaction();
			/*
			 * session.get(类名.class,id) 可以根据指定实体类和id从db中
			 * 读取记录，并返回对应的实体对象。若找不到返回null。立即查询。
			 * 区别session.load()方法，可延迟加载。
			 * */
			ServiceCategory sc = (ServiceCategory) session.get(
					ServiceCategory.class, id);
			session.delete(sc);
			tx.commit();
			session.close();
			return true;
		} catch (HibernateException e) {
			e.printStackTrace();
			tx.commit();
			session.close();
			return false;
		}

	}
	
	// 查找一个服务类别，模糊查询
	public List<ServiceCategory> findSerCate(String message) {
		session = getSession();
		tx = session.beginTransaction();
		hql = "from ServiceCategory sc where sc.serCateName like '%" + message
				+ "%'";
		Query query = session.createQuery(hql);
		List<ServiceCategory> list = query.list();
		System.out.println("查询出的list为：" + list);
		tx.commit();
		session.close();
		return list;

	}

}
